/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package net.etrs.formathlon.metier.utils.email;

import java.util.HashMap;
import java.util.Map;
import net.etrs.formathlon.entity.formation.Session;
import net.etrs.formathlon.entity.utilisateur.Personnel;
import net.etrs.formathlon.entity.utilisateur.Utilisateur;

/**
 * Classe d'acces aux informations necessaire à l'envoi du rapport de 
 * participation aux chef.
 * @author OPIF
 */
public class MailParticipationDTO {
    
    
    /**
     * La session concernée par le compte rendu de participation
     */
    private Session session;
    
    /**
     * La liste des destinataire du mail
     */
    private Map<Utilisateur, Destinataire> destinataires=new HashMap<Utilisateur, Destinataire>();

    
    /**
     * Il n'y a pas de mail de compte rendu de participation sans session.
     * @param session 
     */
    public MailParticipationDTO(Session session) {
        this.session=session;
    }

    
    
    /**
     * @return the destinataire
     */
    public Destinataire getDestinataire(Utilisateur utilisateur) {
        Destinataire dest=getDestinataires().get(utilisateur);
        if(dest==null){
            dest=new Destinataire(utilisateur);
            getDestinataires().put(utilisateur, dest);
        }
        return dest;
    }

    /**
     * @return the session
     */
    public Session getSession() {
        return session;
    }

    /**
     * @return the destinataires
     */
    public Map<Utilisateur, Destinataire> getDestinataires() {
        return destinataires;
    }
    
    
    
    /**
     * Un destinataire est un chef qui recevra un compte rendu
     * de participation par mail.
     */
    public class Destinataire{
        
        private Utilisateur utilisateur;
        private Map<Personnel, Boolean> listParticipationSubordonne=new HashMap<Personnel, Boolean>();

        public Destinataire(Utilisateur utilisateur) {
            this.utilisateur=utilisateur;
        }
        

        /**
         * Détermine la participation d'un personnel subordonné.
         * @param subordonne
         * @param aParticipe 
         */
        public void setParticipationSubordonne(Personnel subordonne, boolean aParticipe) {
            getListParticipationSubordonne().put(subordonne, aParticipe);
        }

        /**
         * @return the utilisateur
         */
        public Utilisateur getUtilisateur() {
            return utilisateur;
        }

        /**
         * @return the listParticipationSubordonne
         */
        public Map<Personnel, Boolean> getListParticipationSubordonne() {
            return listParticipationSubordonne;
        }

        /**
         * @return the listParticipationSubordonne
         */
        public Boolean getParticipation(Personnel subordonne) {
            return listParticipationSubordonne.get(subordonne);
        }
        
    }
    
}
